/*
 * p2215.cpp
 *
 *  Created on: 2013-3-17
 *      Author: zy
 */

#include<algorithm>
#include<cstdio>
#include<cmath>
#include<iostream>
using namespace std;
int sig(double d)
{
	return fabs(d) < 1E-8 ? 0 : d < 0 ? -1 : 1;
}
struct Point
{
	double x, y;
	double k;
	Point()
	{
	}
	Point(double x, double y) :
		x(x), y(y)
	{
	}
	void set(double x, double y)
	{
		this->x = x;
		this->y = y;
	}
	double mod()
	{//模
		return sqrt(x * x + y * y);
	}
	double mod_pow()
	{//模的平方
		return x * x + y * y;
	}
	void output()
	{
		printf("x = %f, y = %f\n", x, y);
	}
	bool operator <(const Point &p) const
	{
		return sig(x - p.x) != 0 ? x < p.x : sig(y - p.y) < 0;
	}
};

double cross(Point o, Point a, Point b)
{
	return (a.x - o.x) * (b.y - o.y) - (b.x - o.x) * (a.y - o.y);
}
double dot(Point &o, Point &a, Point &b)
{
	return (a.x - o.x) * (b.x - o.x) + (a.y - o.y) * (b.y - o.y);
}
int btw(Point &x, Point &a, Point &b)
{
	return sig(dot(x, a, b));
}

double dis(Point a, Point b)
{
	return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}
double dot(Point &a, Point &b)
{
	return a.x * b.x + a.y * b.y; //(a.x-o.x)*(b.x-o.x) + (a.y-o.y)*(b.y-o.y);
}
double cos(Point o, Point a, Point b)
{
	return dot(o, a, b) / dis(o, a) / dis(o, b);
}
int graham(Point*p, int n, int*ch)
{
#define push(x)     ch[len ++]=x
#define pop()		len --
	sort(p, p + n);
	int len = 0, len0 = 1, i;
	for (i = 0; i < n; i++)
	{
		while (len > len0 && sig(cross(p[ch[len - 1]], p[ch[len - 2]], p[i]))
				<= 0)
			pop();
		push(i);
	}
	len0 = len;
	for (i = n - 2; i >= 0; i--)
	{
		while (len > len0 && sig(cross(p[ch[len - 1]], p[ch[len - 2]], p[i]))
				<= 0)
			pop();
		push(i);
	}
	return len - 1;
}
/**
 minimal enclosing circle(最小覆盖圆)
 ---------------------------------------
 p: 点集合
 n: 个数
 center: 存储这些点的中心
 返回:半径

 效率：nlgn

 需要调用Jarvis等函数
 */
double MEC(Point *p, int n, Point &center)
{
#define g1(a,b,c) p##a.x = pp##b.x-pp##c.x;	p##a.y = pp##b.y-pp##c.y
	static int idx, i, ch[1000010], num, s1, s2;
	static double tmp, cos_v, cos_s1, cos_s2, a, b, c, d;
	static Point p1, p2, p3;
	num = graham(p, n, ch);
	s1 = 0, s2 = 1;
	while (1)
	{
		idx = 0;
		cos_v = -100;
		Point &pp1 = p[ch[s1]], &pp2 = p[ch[s2]];
		for (i = 0; i < num; i++)
		{
			tmp = cos(p[ch[i]], pp1, pp2);
			if (tmp > cos_v)
			{
				cos_v = tmp;
				idx = i;
			}
		}
		Point &pp3 = p[ch[idx]];
		if (sig(cos_v) <= 0)
		{
			center.x = (pp1.x + pp2.x) / 2.0;
			center.y = (pp1.y + pp2.y) / 2.0;
			break;
		}
		cos_s1 = cos(pp1, pp2, pp3);
		cos_s2 = cos(pp2, pp1, pp3);

		if (sig(cos_s1) >= 0 && sig(cos_s2) >= 0)
		{ //这个三角形就是
			g1(1,2,3);
			g1(2,1,3);
			g1(3,1,2);
			d = cross(pp2, pp1, pp3);
			d = d * d * 2.0;
			a = p1.mod_pow() * dot(p3, p2) / d;
			b = -p2.mod_pow() * dot(p3, p1) / d;
			c = p3.mod_pow() * dot(p2, p1) / d;
			center.x = a * pp1.x + b * pp2.x + c * pp3.x;
			center.y = a * pp1.y + b * pp2.y + c * pp3.y;
			break;
		}
		if (sig(cos_s1) < 0)
			s1 = idx;
		else
			s2 = idx;
	}
	return dis(center, p[ch[s1]]);
}
Point p[600];
int main()
{
	int n;
	while (scanf("%d", &n), n)
	{
		for (int i = 0; i < n; i++)
			scanf("%lf%lf", &p[i].x, &p[i].y);
		Point c;
		if (n == 1)
		{
			printf("0.50\n");
			continue;
		}
		if (n == 2)

		{

			printf("%.2lf\n", 0.5 * dis(p[0], p[1]) + 0.5);

			continue;

		}
		double r = MEC(p, n, c);
		printf("%.2lf\n", r + 0.5);
	}
	return 0;
}
